home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / lsdtrainer.lha / trainer.s < prev   
Encoding:
Text File  |  1989-08-11  |  9.8 KB  |  636 lines

  1.     Section Copperlist,code_C
  2.  
  3.     opt    c-,o-
  4.  
  5.     move.l  4.w,a6        ; exec lib
  6.  
  7.     lea    dlib,a1
  8.     moveq    #0,d0
  9.     move.l    4.w,a6
  10.     jsr    -$228(a6)
  11.     tst    d0
  12.     beq    error
  13.     move.l    D0,dos        ; store address of dos lib
  14.  
  15.     lea    glib,a1
  16.     moveq    #0,d0
  17.     move.l    4.w,a6
  18.     jsr    -$228(a6)
  19.     tst    d0
  20.     beq    error
  21.     move.l    D0,graphics    ; store address of graphics lib
  22.     
  23.     move.l    #Screen+32,d0    ; store address of bitplane0
  24.     move.w    d0,bitplane0_lo    ; into the copper list
  25.     swap    d0
  26.     move.w    d0,bitplane0_hi
  27.     swap    d0
  28.     add.l    #bplen,d0
  29.  
  30.     move.w    d0,bitplane1_lo    ; into the copper list
  31.     swap    d0
  32.     move.w    d0,bitplane1_hi
  33.     swap    d0
  34.     add.l    #bplen,d0
  35.     
  36.     move.w    d0,bitplane2_lo    ; into the copper list
  37.     swap    d0
  38.     move.w    d0,bitplane2_hi
  39.     swap    d0
  40.     add.l    #bplen,d0
  41.     
  42.     move.w    d0,bitplane3_lo    ; into the copper list
  43.     swap    d0
  44.     move.w    d0,bitplane3_hi
  45.     swap    d0
  46.  
  47.     move.l  4.w,a6
  48.     move.l    #scrsize,d0
  49.     move.l    #$10002,d1
  50.     jsr    -198(a6)
  51.     
  52.     move.l    d0,screen2
  53.     move.w    d0,bitplane4_lo
  54.     swap     d0
  55.     move.w    d0,bitplane4_hi
  56.     
  57.     move.l    graphics,a6
  58.     add.l    #$32,a6
  59.     move.w    #$80,$dff096        ; dma control write
  60.     move.l    (a6),old_copper        ; store the address of the
  61.     move.l    #my_copper,(a6)        ; old copperlist
  62.     move.w    #$8080,$dff096        ; dma control write
  63.     move.w    #$8010,$dff09a        ; interupt enable bits
  64.     move.l    $6c.w,old_interupt    ; store old level 3 int
  65.     move.l    #new_interupt,$6c.w    ; store my routine
  66.                     ; into level 3 int
  67.     jsr    setup_screen
  68.     
  69.     bchg    #1,$bfe001        ; turn led off
  70.  
  71.     jsr    keys
  72.  
  73.     bchg    #1,$bfe001        ; turn led on
  74.     
  75.     move.l    old_interupt,$6c.w    ; resore old level 3 int
  76.     move.l    #$10,$dff09a         ; Disable Level 3 Interupt
  77.     move.l    graphics,a6
  78.     add.l    #$32,a6
  79.     move.w    #$0080,$dff096
  80.     move.l    old_copper,(a6)        ; restore old copper list
  81.     move.w    #$8080,$dff096
  82.     move.l    graphics,a1
  83.     move.l    4.w,a6
  84.     jsr    -$19e(a6)
  85.     move.l    4.w,a6
  86.     jsr    -138(a6)
  87.     
  88.     move.l  4.w,a6
  89.     move.l    screen2,a1
  90.     move.l    #scrsize,d0
  91.     jsr    -210(a6)
  92.  
  93. Error:    moveq    #0,d0            ; fin
  94.     rts
  95.  
  96. keys:
  97.     move.b    $bfec01,d0
  98.     cmp.b    #119,d0
  99.     bne    not_return
  100.     
  101.     move.w    #0,d0
  102.     
  103.     move.b    f1+1,d1
  104.     cmp.b    #"F",d1
  105.     beq.s    no_f1
  106.     or.w    #1,d0
  107. no_f1:    
  108.     move.b    f2+1,d1
  109.     cmp.b    #"F",d1
  110.     beq.s    no_f2
  111.     or.w    #2,d0
  112. no_f2:    
  113.     move.b    f3+1,d1
  114.     cmp.b    #"F",d1
  115.     beq.s    no_f3
  116.     or.w    #4,d0
  117. no_f3:    
  118.     move.b    f4+1,d1
  119.     cmp.b    #"F",d1
  120.     beq.s    no_f4
  121.     or.w    #8,d0
  122. no_f4:    
  123.     move.b    f5+1,d1
  124.     cmp.b    #"F",d1
  125.     beq.s    no_f5
  126.     or.w    #16,d0
  127. no_f5:    
  128.     move.b    f6+1,d1
  129.     cmp.b    #"F",d1
  130.     beq.s    no_f6
  131.     or.w    #32,d0
  132. no_f6:    
  133.     move.l    #$1ff,d1
  134.     move.l    #trainer,a0
  135.     move.l    #$100,a1
  136.     
  137. block:    move.b    (a0)+,(a1)+
  138.     dbf    d1,block
  139.  
  140.     move.b    d0,$11e
  141.     
  142.     
  143.     clr.l    d0
  144.     move.b    f7,d0
  145.     sub.b    #49,d0
  146.     mulu    #4,d0
  147.     add.l    #levels,d0
  148.     move.l    d0,a0
  149.     move.l    (a0),$120
  150.     
  151.     
  152.     move.l    dos,a6
  153.     move.l    #loadme,d1
  154.     clr.l    d2
  155.     clr.l    d3
  156.     
  157.     jsr    -$de(a6)
  158.  
  159.     rts
  160.     
  161. trainer:    
  162.  
  163.     move.w    #$10E,$50034
  164.     jmp    $50000
  165.     
  166.     move.l    #$000000124,$80e2
  167.     jmp    $400
  168.     
  169.     dc.w    0
  170.     dc.l    0
  171.     
  172.     move.b    $11e,d0
  173.     and.b    #1,d0
  174.     beq.s    no_lives
  175.     move.w    #$4e71,$84ee    ; inf lives
  176.     move.w    #$4e71,$84f0
  177. no_lives:
  178.     move.b    $11e,d0
  179.     and.b    #2,d0
  180.     beq.s    no_shots
  181.     move.w    #$4e71,$a436    ; inf shots
  182. no_shots:
  183.     move.b    $11e,d0
  184.     and.b    #4,d0
  185.     beq.s    no_gren
  186.     move.w    #$4e71,$a424    ; inf grenades
  187. no_gren:
  188.     move.b    $11e,d0
  189.     and.b    #16,d0
  190.     beq.s    no_token
  191.     move.b    #$60,$1049c    ; not drop tokens
  192. no_token:
  193.     move.b    $11e,d0
  194.     and.b    #8,d0
  195.     beq.s    no_weapons
  196.     move.w    #$4e71,$104e0    ; not drop weapons
  197.     move.w    #$4e71,$104e2
  198.     move.b    #$60,$104e8
  199.     move.b    #$60,$10506
  200. no_weapons:
  201.     move.b    $11e,d0
  202.     and.b    #32,d0
  203.     beq.s    no_proof
  204.     move.b    #1,$11693
  205. no_proof:
  206.     movem.l    d0-d7/a0-a6,-(sp) 
  207.     move.l    $9552,d0
  208.     cmp.l    #$969c,d0
  209.     bne.s    not_level1
  210.     move.l    $120,d0
  211.     cmp.l    #$969c,d0
  212.     blt.s    not_level1
  213.     move.l    $120,$9552
  214.     move.w    #1,$9556
  215. not_level1:
  216.     movem.l    (sp)+,d0-d7/a0-a6    
  217.  
  218.     jmp    $10214        ; go!!
  219.  
  220.  
  221.     
  222.  
  223. not_return:
  224.     cmp.b    #95,d0
  225.     bne.s    not_f1
  226.     
  227.     lea    f1,a0
  228.     jsr    change
  229. not_f1:
  230.     cmp.b    #93,d0
  231.     bne.s    not_f2
  232.     
  233.     lea    f2,a0
  234.     jsr    change
  235. not_f2:
  236.     cmp.b    #91,d0
  237.     bne.s    not_f3
  238.     
  239.     lea    f3,a0
  240.     jsr    change
  241. not_f3:
  242.     cmp.b    #89,d0
  243.     bne.s    not_f4
  244.     
  245.     lea    f4,a0
  246.     jsr    change
  247. not_f4:
  248.     cmp.b    #87,d0
  249.     bne.s    not_f5
  250.     
  251.     lea    f5,a0
  252.     jsr    change
  253. not_f5:
  254.     cmp.b    #85,d0
  255.     bne.s    not_f6
  256.     
  257.     lea    f6,a0
  258.     jsr    change
  259. not_f6:
  260.     cmp.b    #83,d0
  261.     bne.s    not_f7
  262.     
  263.     move.b    f7,d4
  264.     add.b    #1,d4
  265.     cmp.b    #58,d4
  266.     bne.s    not_f7max
  267.     move.b    #49,d4
  268. not_f7max:
  269.     move.b    d4,f7
  270.     bsr.s    change2
  271.  
  272. not_f7:
  273.     bra    keys
  274.  
  275. change:    move.b    (a0),d1
  276.     eor.b    #00,d1
  277.     move.b    d1,(a0)+
  278.     
  279.     move.b    (a0),d1
  280.     eor.b    #08,d1
  281.     move.b    d1,(a0)+
  282.     
  283.     move.b    (a0),d1
  284.     eor.b    #102,d1
  285.     move.b    d1,(a0)+
  286. change2:
  287.     movem.l    d0-d7/a0-a6,-(sp) 
  288.     jsr    refresh
  289.     movem.l    (sp)+,d0-d7/a0-a6    
  290.  
  291. key:    move.b    $bfec01,d1
  292.     cmp.b    d0,d1
  293.     beq.s    key    
  294.     rts
  295.  
  296.  
  297. new_interupt:
  298.     movem.l    d0-d7/a0-a6,-(sp) 
  299.  
  300. wait_irq:
  301.     and.w    #$10,$dff01e
  302.     beq     no_music
  303.     move.w    #$10,$dff09c
  304.  
  305.     move.l    scr2,d0    
  306.     move.w    d0,bitplane4_lo
  307.     swap     d0
  308.     move.w    d0,bitplane4_hi
  309.  
  310. no_music:
  311.     movem.l    (sp)+,d0-d7/a0-a6    
  312.     dc.w    $4ef9            ; jmp
  313. old_interupt:    dc.l    0        ; the old int lev 3
  314.  
  315. setup_screen:
  316.  
  317.     lea    cmap,a0
  318.     move.w    (a0)+,d0
  319.     
  320.     lea    screen,a1
  321.     move.w    #15,d0
  322. cmaploop:
  323.     move.w    (a1)+,(a0)+
  324.     addq.l    #2,a0
  325.     subq.w    #1,d0
  326.     bpl.s    cmaploop    
  327.  
  328.     move.l    screen2,a2
  329.     move.l    a2,newscr
  330.     move.l    a2,scr1
  331.     add.l    #32*400,a2
  332.     move.l    a2,scr2
  333.  
  334. refresh:
  335.     move.l    scr1,$dff054                ; dest mem d
  336.     move.w    #0,$dff064                ; source a modulo 
  337.     Move.w    #0,$dff044                ; blit 1st word mask source a
  338.     move.w    #0,$dff046
  339.     move.w    #(%0001)*256,$dff040            ; blit cont reg 0
  340.     move.w    #%0000000000000100,$dff042        ; blit cont reg 1
  341.     Move.w    #0,$dff066                ; modulo for dest
  342.     Move.w    #(90*64)+40,$dff058            ; blit height,width
  343.     jsr    do_blit
  344.  
  345.     lea    names,a1
  346.     move.l    scr1,a2
  347.     add.l    #81,a2
  348.     jsr    blit_message
  349.  
  350.     moveq.l    #10,d0
  351.  
  352. plot_again:
  353.  
  354.     add.l    #40*tall,a2
  355.     jsr    blit_message
  356.  
  357.     move.b    (a1),d0
  358.     bne.s    plot_again
  359.     
  360.     move.l    scr1,d0
  361.     move.l    scr2,d1
  362.     move.l    d1,scr1
  363.     move.l    d0,scr2
  364.  
  365.     rts
  366.     
  367. blit_message:
  368.  
  369.     movem.l    d0-d7/a2-a6,-(sp)
  370.  
  371.     move.l    #0,midadd
  372.  
  373.     move.l    a1,a6
  374.     clr.b    d0
  375.     moveq.l    #-1,d1
  376.     
  377. blit_message_loop1:
  378.  
  379.     addq.l    #1,d1
  380.     move.b    (a6),d0
  381.     addq    #1,a6
  382.     cmp.b    #0,d0
  383.     bne.s    blit_message_loop1
  384.  
  385.     move.w    d1,d5
  386.     and.w    #1,d5
  387.     asl.w    #1,d5
  388.     move.w    d5,mid
  389.     
  390.     move.l    a2,midadd
  391.     move.w    d1,d5
  392.  
  393.     addq.l    #1,d1
  394.     lsr.l    #1,d1
  395.     moveq.l    #20,d6
  396.     sub.l    d1,d6
  397.     add.l    d6,a2
  398.     move.l    a2,d2
  399.     and.l    #$fffffffe,d2
  400.     move.l    a2,d3
  401.     and.l    #1,d3
  402.     move.l    d2,a2
  403.     
  404.     move.w    #12,d6
  405.     cmp.l    #1,d3
  406.     beq.s    cont_blit_message
  407.     
  408.     add.w    #12,mid
  409.     subq.l    #2,midadd
  410.     
  411. cont_blit_message:
  412.     
  413.     move.w    d6,d7
  414.     mulu    #8192,d7
  415.     
  416.     subq.w    #4,d6
  417.     cmp.w    #4,d6
  418.     bne.s    other_half
  419.     
  420.     move.w    #12,d6
  421.     add.l    #80,a2
  422.     
  423. other_half:
  424.  
  425.     sub.l    #40,a2
  426.     clr.w    d0
  427.     lea    font,a0
  428.     move.b    (a1),d0
  429.     addq.l    #1,a1
  430.     cmp.b    #0,d0
  431.     bne.s    mess_is_ok
  432.  
  433.     movem.l    (sp)+,d0-d7/a2-a6    
  434.     
  435.     move.w    mid,d5
  436.     mulu    #8192,d5
  437.     or.w    #(%1001*256)+$f0,d5
  438.     
  439.     move.l    midadd,a3
  440.  
  441.     Move.l    a3,$dff054        ; dest mem d
  442.     Move.l    a2,$dff050        ; source mem a
  443.     Move.w    #$ffff,$dff044        ; blit 1st word mask source a
  444.     move.w    #$ffff,$dff046        ; blit last word mask source a
  445.     move.w    #0,$dff064        ; blit modulo for source a
  446.     move.w    d5,$dff040
  447.     move.w    #0,$dff042        ; blit cont reg 1
  448.     Move.w    #0,$dff066        ; modulo for dest
  449.     Move.w    #(8*64)+40,$dff058    ; blit height,width
  450.  
  451.     jsr    do_blit
  452.  
  453. dont_centre:
  454.     rts
  455.     
  456.     
  457. mess_is_ok:
  458.     sub    #32,d0
  459.     mulu    #16,d0
  460.     add    d0,a0
  461.     
  462.     Move.l    a2,$dff054        ; dest mem d
  463.     Move.l    a0,$dff050        ; source mem a
  464.     move.l    a2,$dff048        ; source mem c
  465.     Move.w    #$ffff,$dff044        ; blit 1st word mask source a
  466.     move.w    #$ffff,$dff046        ; blit last word mask source a
  467.     move.w    #0,$dff064        ; blit modulo for source a
  468.     move.w    #38,$dff060        ; blit modulo for source c    
  469.     or.w    #(%1011*256)+$fa,d7
  470.     move.w    d7,$dff040        ; blit cont reg 0
  471.     move.w    #0,$dff042        ; blit cont reg 1
  472.     Move.w    #38,$dff066        ; modulo for dest
  473.     Move.w    #(8*64)+1,$dff058    ; blit height,width
  474.  
  475.     jsr    do_blit
  476.     
  477.     addq.l    #1,a2
  478.     bra    cont_blit_message
  479.  
  480. do_blit:
  481.     btst.b    #6,$dff002
  482.     bne.s    do_blit
  483.     rts
  484.     
  485.  
  486. tadd    equ    230*46
  487.  
  488.  
  489.  
  490.     
  491.     Section    copdat,Data_c
  492.  
  493. names:
  494.     dc.b    " ",0
  495.     dc.b    "CRACKED BY THE ANGELS",0
  496.     dc.b    " ",0
  497.     dc.b    "MEGA-TRAINED BY SHAGRATT OF LSD",0
  498.     dc.b    " ",0
  499.     dc.b    "F1 - INFINITE LIVES     : "
  500. f1:    dc.b    "OFF",0
  501.     dc.b    "F2 - INFINITE AMMO      : "
  502. f2:    dc.b    "OFF",0
  503.     dc.b    "F3 - INFINITE GRENADES  : "
  504. f3:    dc.b    "OFF",0
  505.     dc.b    "F4 - KEEP WEAPONS       : "
  506. f4:    dc.b    "OFF",0
  507.     dc.b    "F5 - KEEP TOKENS        : "
  508. f5:    dc.b    "OFF",0
  509.     dc.b    "F6 - INVUNERABILITY     : "
  510. f6:    dc.b    "OFF",0
  511.     dc.b    "F7 - START LEVEL (1-9)  : 0"
  512. f7:    dc.b    "1 ",0
  513.     dc.b    " ",0
  514.     dc.b    "RETURN - START GAME",0
  515.     dc.b    " ",0
  516.     dc.b    " ",0
  517.     dc.b    "NOTE: WHEN DRIVE HEADS STOP MOVING",0
  518.     dc.b    "ON THE TITLE PAGE INSERT DISK II",0
  519.     
  520.     dc.b    0
  521.  
  522.  
  523. mid:        dc.w    0
  524. midadd:        dc.l    0
  525. old_copper:    dc.l    0
  526. graphics:    dc.l    0
  527. dos:        dc.l    0
  528.  
  529. my_copper:    dc.w    $100,$4200    ; 4 bp - lores - 
  530.         dc.w    $104,$a        ; bp control reg
  531.         dc.w    $108,0        ; bp modulo - odd
  532.         dc.w    $10a,0        ; bp modulo - even
  533.         dc.w    $180,0        ; colour 0 to black
  534.  
  535.         dc.w    $120,0,$122,0
  536.         
  537.         dc.w    $182,$fff
  538.     
  539.         dc.w    $092,$38    ; bp start horz
  540.         dc.w    $08e,$2c8c    ; bp window start left
  541.         dc.w    $090,$2ce3    ; bp window bot right
  542.         dc.w    $094,$2dd0    ; bp stop horz
  543.         
  544. cmap:        dc.w    $180,0
  545.         dc.w    $182,0
  546.         dc.w    $184,0
  547.         dc.w    $186,0
  548.         dc.w    $188,0
  549.         dc.w    $18a,0
  550.         dc.w    $18c,0
  551.         dc.w    $18e,0
  552.         dc.w    $190,0
  553.         dc.w    $192,0
  554.         dc.w    $194,0
  555.         dc.w    $196,0
  556.         dc.w    $198,0
  557.         dc.w    $19a,0
  558.         dc.w    $19c,0
  559.         dc.w    $19e,0
  560.     
  561.         
  562.         dc.w    $0e0
  563. bitplane0_hi:    dc.w    0
  564.         dc.w    $e2
  565. bitplane0_lo:    dc.w    0,$e4
  566. bitplane1_hi:    dc.w    0
  567.         dc.w    $e6
  568. bitplane1_lo:    dc.w    0,$e8
  569. bitplane2_hi:    dc.w    0
  570.         dc.w    $ea
  571. bitplane2_lo:    dc.w    0,$ec
  572. bitplane3_hi:    dc.w    0
  573.         dc.w    $ee
  574. bitplane3_lo:    dc.w    0
  575.  
  576.         dc.b    top_of_copper,1
  577.         dc.w    $ff00,$182,$000
  578.         dc.w    $100,$1200    ; 1 bp - lores 
  579.         
  580.         dc.w    $0e0
  581. bitplane4_hi:    dc.w    0
  582.         dc.w    $e2
  583. bitplane4_lo:    dc.w    0
  584.         
  585.         dc.w    $182,$fff
  586.         dc.w    $ffe1,$fffe    ; wait for end of ntsc screen
  587.         
  588.         dc.w    $3001,$ff00    ; wait for end of pal screen
  589.  
  590.         dc.w    $9c,$8010    ; irq set bits - ?
  591.         dc.w    $ffff,$fffe    ; end of copper list
  592.     
  593. glib:        dc.b    "graphics.library",0
  594.         even
  595. dlib:        dc.b    "dos.library",0
  596.         even        
  597.  
  598. tall        equ    10
  599.     
  600. screen:        incbin    "train.bin";    must have the colour map before the 
  601.                      ;    image, must be 40 horz and any
  602.                      ;  size vertically (within reason).
  603.  
  604. scrsize:    equ    40*tall*64
  605. screen2:    dc.l    0
  606. font:        incbin    "chrset.wrd"
  607. loadme:        dc.b    "Resistance",0
  608.         even
  609.  
  610. levels:        dc.l    $9658
  611.         dc.l    $96c8
  612.         dc.l    $9720
  613.         dc.l    $978a
  614.         dc.l    $97e2
  615.         dc.l    $983c
  616.         dc.l    $9896
  617.         dc.l    $98ca
  618.         dc.l    $98fe
  619.  
  620.  
  621.         
  622. newscr:        dc.l    0
  623. flag:        dc.l    0
  624.  
  625. scr1:        dc.l    0
  626. scr2:        dc.l    0
  627.  
  628. bplen        equ    ((screen2-screen)-32)/4
  629. top_of_copper    equ    44+(bplen/40)
  630. down        equ    top_of_copper+108
  631. lookup_list:    dcb.l    150,0
  632.  
  633.  
  634.  
  635.     End
  636.